import store from '@/store/index'

export function deepClone(target) {
    // 定义一个变量
    let result
    // 如果当前需要深拷贝的是一个对象的话
    if (typeof target === 'object') {
        // 如果是一个数组的话
        if (Array.isArray(target)) {
            result = [] // 将result赋值为一个数组，并且执行遍历
            for (let i in target) {
                // 递归克隆数组中的每一项
                result.push(deepClone(target[i]))
            }
            // 判断如果当前的值是null的话；直接赋值为null
        } else if (target === null) {
            result = null
            // 判断如果当前的值是一个RegExp对象的话，直接赋值
        } else if (target.constructor === RegExp) {
            result = target
        } else {
            // 否则是普通对象，直接for in循环，递归赋值对象的所有值
            result = {}
            for (let i in target) {
                result[i] = deepClone(target[i])
            }
        }
        // 如果不是对象的话，就是基本数据类型，那么直接赋值
    } else {
        result = target
    }
    // 返回最终结果
    return result
}

function hasPermission(permission) {
    if (store.state.settings.openPermission) {
        return store.state.user.permissions.some(v => {
            return v === permission
        })
    } else {
        return true
    }
}

export function auth(value) {
    let auth
    if (typeof value === 'string') {
        auth = hasPermission(value)
    } else {
        auth = value.some(item => {
            return hasPermission(item)
        })
    }
    return auth
}

export function authAll(value) {
    const auth = value.every(item => {
        return hasPermission(item)
    })
    return auth
}

// 路由 title 转国际化
export function generateI18nTitle(key, defaultTitle) {
    let title
    if (this.$te(key)) {
        title = this.$t(key)
    } else {
        title = defaultTitle
    }
    return title
}

// 计算时间差
export function diffTime(ms) {
    let dayDiff = Math.floor(ms / (24 * 3600 * 1000)) // 计算出相差天数
    let leave1 = ms % (24 * 3600 * 1000) // 计算天数后剩余的毫秒数
    let hours = Math.floor(leave1 / (3600 * 1000)) // 计算出小时数
    // 计算相差分钟数
    let leave2 = leave1 % (3600 * 1000) // 计算小时数后剩余的毫秒数
    let minutes = Math.floor(leave2 / (60 * 1000)) // 计算相差分钟数
    // 计算相差秒数
    let leave3 = leave2 % (60 * 1000) // 计算分钟数后剩余的毫秒数
    let second = Math.round(leave3 / 1000)
    if (dayDiff > 0) {
        return `${dayDiff}天${hours}小时${minutes}分钟${second}秒`
    } else {
        return `${hours}小时${minutes}分钟${second}秒`
    }
}
